import java.util.Vector;

/**
 * 
 */

/**
 * @author Davide Dal Bosco
 * @author Francesco Cardin
 *
 */


public final class Model {
	
	static Personaggio[] situazione;
	private static int[][] adiacenze;
	private static int[] livelli_grafo;
	private Vector<Shot> repetitionSeq = new Vector<Shot>(8);
	private static int[] posiz_nani; 
	private static int posiz_gigante = 0;
	private static Personaggio turno = Personaggio.nano ;
	
	public Model() {
		situazione = new Personaggio[8];
		setAdiacenze(new int[8][8]);
		setLivelli_grafo(new int[8]);
		setPosiz_nani(new int[3]);
		
		
		
	}
	
	
	public int[][] getAdiacenze() {
		return adiacenze;
	}


	public void setAdiacenze(int[][] adiacenze) {
		Model.adiacenze = adiacenze;
	}


	public int[] getLivelli_grafo() {
		return livelli_grafo;
	}


	public void setLivelli_grafo(int[] livelli_grafo) {
		Model.livelli_grafo = livelli_grafo;
	}


	public int getPosiz_gigante() {
		return posiz_gigante;
	}


	public void setPosiz_gigante(int posiz_gigante) {
		Model.posiz_gigante = posiz_gigante;
	}


	public int[] getPosiz_nani() {
		return posiz_nani;
	}


	public void setPosiz_nani(int[] posiz_nani) {
		Model.posiz_nani = posiz_nani;
	}

	public void prepara_matrice_di_gioco(int a[][]) {
		for(int i=0; i<8; i++) 
			for( int j=0; j<8; j++)
				a[i][j]=0; 
		a[0][1]=a[0][2]=a[0][3]=1; 
		a[1][2]=a[1][3]=a[1][4]=a[1][0]=1; 
		a[2][1]=a[2][3]=a[2][6]=a[2][0]=1; 
		a[3][4]=a[3][5]=a[3][6]=a[3][1]=a[3][0]=a[3][2]=1; 
		a[4][5]=a[4][7]=a[4][3]=a[4][1]=1; 
		a[5][4]=a[5][7]=a[5][6]=a[5][3]=1; 
		a[6][5]=a[6][7]=a[6][3]=a[6][2]=1; 
		a[7][4]=a[7][5]=a[7][6]=1;
	}
	
	public void prepara_livelli(int livelli_grafo[]) {
		livelli_grafo[0]=0; 
		livelli_grafo[1]=livelli_grafo[2]=1; 
		livelli_grafo[3]=2; 
		livelli_grafo[4]=livelli_grafo[5]=livelli_grafo[6]=3;
		livelli_grafo[7]=4;
	}
	
	void pushShot (Shot shot) {
		if(repetitionSeq.size() >= 4 && repetitionSeq.size() <= 8 
				&& !shot.equals(repetitionSeq.get(repetitionSeq.size()%4)))
			repetitionSeq.clear();
		repetitionSeq.add(shot);
		
	}

	boolean giantWinForRepetition() {
		return repetitionSeq.size()>8;
		
	}
	
	Vector<Shot> getRepetitionSeq() {
		return repetitionSeq;
		
	}
	
	public static void changeTurno(Personaggio turno) {
		Model.turno = turno;
	}


	public static Personaggio getTurno() {
		return turno;
	}





}
